非常偷懶的把官方介紹七個範例照打,目的在於粗略了解 Vue 在幹麻。
可以點擊各個範例的 fiddle 連結自行修改和觀看結果。
最基礎的資料綁定就是插入 string,利用 Mustache 的語法:
<div id="app">
<p>{{ message }}</p>
</div>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
}
})
執行結果
附上 fiddle (https://jsfiddle.net/hunterliu/ofmm9pk9/)
有時 double curly braces 的語法會與後端有衝突,為避免這樣的情況發生,可以在 Vue Instance 的選項物件中加入delimiters: ['${', '}']
。
我們可以簡單改寫上例如下:
<div id="app">
<p>${ message }</p>
</div>
new Vue({
el: '#app',
delimiters: ['${', '}'],
data: {
message: 'Hello Vue.js!'
}
})
執行結果
附上 fiddle https://jsfiddle.net/hunterliu/ofmm9pk9/1/
Vue 可以透過 v-bind 綁定 HTML 的屬性。
<div id="app-2">
<span v-bind:title="message">
Hover your mouse over me for a few seconds
to see my dynamically bound title!
</span>
</div>
var app2 = new Vue({
el: '#app-2',
data: {
message: 'You loaded this page on ' + new Date().toLocaleString()
}
})
執行結果
附上 fiddle (https://jsfiddle.net/hunterliu/f7swmcnb/)
透過 v-if 這個指令(directive)決定是否顯示p
tag。
<div id="app-3">
<p v-if="seen">Now you see me</p>
</div>
var app3 = new Vue({
el: '#app-3',
data: {
seen: true
}
})
執行結果
附上 fiddle (https://jsfiddle.net/hunterliu/hj0kuy8j/1/)
透過 v-for 這個指令(directive)顯示 todos list。
<div id="app-4">
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
</div>
var app4 = new Vue({
el: '#app-4',
data: {
todos: [
{ text: 'Learn JavaScript' },
{ text: 'Learn Vue' },
{ text: 'Build something awesome' }
]
}
})
執行結果
附上 fiddle (https://jsfiddle.net/hunterliu/5qx0rguc/)
在console輸入app4.todos.push({ text: 'New item' })
可以看到新增了一項todo。
透過 v-on 綁定 click 事件,點擊button
時執行reverseMessage
,將message反轉。
<div id="app-5">
<p>{{ message }}</p>
<button v-on:click="reverseMessage">Reverse Message</button>
</div>
var app5 = new Vue({
el: '#app-5',
data: {
message: 'Hello Vue.js!'
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
})
執行結果
附上 fiddle (https://jsfiddle.net/hunterliu/s5qcnq9c/)
透過 v-model 可雙向綁定 input 和 vue instance 的 message。
<div id="app-6">
<p>{{ message }}</p>
<input v-model="message">
</div>
var app6 = new Vue({
el: '#app-6',
data: {
message: 'Hello Vue!'
}
})
執行結果
附上 fiddle (https://jsfiddle.net/hunterliu/hakh94ro/1/)
<div id="app-7">
<ol>
<todo-item
v-for="item in groceryList"
v-bind:todo="item"
v-bind:key="item.id">
</todo-item>
</ol>
</div>
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})
var app7 = new Vue({
el: '#app-7',
data: {
groceryList: [
{ id: 0, text: 'Vegetables' },
{ id: 1, text: 'Cheese' },
{ id: 2, text: 'Whatever else humans are supposed to eat' }
]
}
})
執行結果
附上 fiddle (https://jsfiddle.net/hunterliu/6bmrr9ar/1/)